package com.sz.framework.utils;

import com.sz.framework.SzManager;

import java.io.Console;

/**
 * 通用综合性的工具类
 *
 * @author: yxl
 * 2025-07-22
 */
public class CommonUtil {

    /**
     * 打印banner
     */
    public static void printBanner() {
        String str = """
                 ____ _____     _____ ____      _    __  __ _______        _____  ____  _  __
                / ___|__  /    |  ___|  _ \\    / \\  |  \\/  | ____\\ \\      / / _ \\|  _ \\| |/ /
                \\___ \\ / /_____| |_  | |_) |  / _ \\ | |\\/| |  _|  \\ \\ /\\ / / | | | |_) | ' /\s
                 ___) / /|_____|  _| |  _ <  / ___ \\| |  | | |___  \\ V  V /| |_| |  _ <| . \\\s
                |____/____|    |_|   |_| \\_\\/_/   \\_\\_|  |_|_____|  \\_/\\_/  \\___/|_| \\_\\_|\\_\\
                """;
        str = str + "\r Version: " + SzManager.VERSION;

        System.out.println(str);
    }

    /**
     * 判断当前系统是否可以打印彩色日志，基本可以满足大部分场景
     *
     * @return /
     */
    public static boolean canPrintColorLog() {
        // 获取当前环境相关信息
        Console console = System.console();
        String term = System.getenv().get("TERM");

        // 两者均为 null，一般是在 eclipse、idea 等 IDE 环境下运行的，此时可以打印彩色日志
        if (console == null && term == null) {
            return true;
        }

        // 两者均不为 null，一般是在 linux 环境下控制台运行的，此时可以打印彩色日志
        if (console != null && term != null) {
            return true;
        }

        // console 有值，term 为 null，一般是在 windows 的 cmd 控制台运行的，此时不可以打印彩色日志
        if (console != null && term == null) {
            return false;
        }

        // console 为 null，term 有值，一般是在 linux 的 nohup 命令运行的，此时不可以打印彩色日志
        // 此时也有可能是在 windows 的 git bash 环境下运行的，此时可以打印彩色日志，但此场景无法和上述场景区分，所以统一不打印彩色日志
        if (console == null && term != null) {
            return false;
        }

        // 正常情况下，代码不会走到这里，但是方法又必须要有返回值，所以随便返回一个
        return false;
    }

    /**
     * 指定元素是否为null或者空字符串
     *
     * @param str 指定元素
     * @return 是否为null或者空字符串
     */
    public static boolean isEmpty(Object str) {
        return str == null || "".equals(str);
    }
}
